Stahování dat pomocí wget

(publikováno 25.04.2017) Windows, Linux, Tipy & triky

wget je mocný nástroj pro stahování souborů přes protokoly HTTP, HTTPS i FTP. Dokáže vytvářet zrcadlové kopie, rekurzivní stahování, pokračovat ve stahování při přerušení a mnoho dalšího.

Stahování dat pomocí wget

Stahování souborů z webů přes příkazovou řádku není nejpohodlnější, přepsat URL do konzole chvíli zabere. Pokud ale je potřeba souborů stáhnout stovky nebo tisíce, automatizovat tuto úlohu už se může vyplatit.

Pro Linux i Windows

V Linuxu je wget již od instalace a stačí jej směle používat, pro Windows je potřeba jej stáhnout. To lze například na stránkách eternallybored.org, nebo pomocí Chocolatey.

Dokumentace je na stránkách gnu.org a měla by být stejná jak pro Windows, tak Linux.

Ukázky

Následující příkazy ukazují běžné a časté použití programu wget, které se může hodit. Je to ale jen malý zlomek toho, co vše wget dokáže.

Všechny skripty lze spustit, URL adresy existují a obsahují testovací data

Jednoduché stažení souboru

# Stáhne soubor a uloží do aktuálního adresáře
wget "http://testdata.kutac.cz/wget/readme.md"

# --output-document, --directory-prefix mohou obsahovat absolutní adresy

# Stáhne soubor, ale uloží s jiným jménem
wget --output-document="readme.txt" http://testdata.kutac.cz/wget/readme.md
# Stáhne a uloží do složky
wget --directory-prefix="subfolder" http://testdata.kutac.cz/wget/readme.md

Pokračovat ve stahování a omezení rychlosti

wget umožňuje pokračovat ve stahování souborů, když došlo k přerušení. Pro lepší názornost je ještě omezená maximální rychlost stahování.

# Začne stahovat maximálná rychlostí 20KB/s
wget --limit-rate="20k" http://testdata.kutac.cz/wget/article_imgs.zip

# Pokračování přerušeného stahování
wget --continue --limit-rate="20k" http://testdata.kutac.cz/wget/article_imgs.zip

Pokračování stahování při přerušení

Stahování podle seznamu odkazů

# Stáhne všechny soubory specifikovány v souboru
# Pokud je soubor takto na webu, bude stažen také
wget --directory-prefix="imgs" --input-file http://testdata.kutac.cz/wget/list.txt

Stahování pouze při změně souborů

Někdy je dobré stáhnout soubor pouze, pokud se od posledního stáhnutí změnil. Třeba pokud má několik GB, je zbytečné jej stahovat znova, nebo pokud stahujeme 1000 souborů, ale změnily se jen 2.

# Stáhne soubor pouze, pokud se od posledního stažení změnil
# Stačí zkusit pustit příkaz 2x za sebou, server vrátí kód 304
wget --timestamping http://testdata.kutac.cz/wget/timestamping.txt

Stahování pouze změněných souborů

Zrcadlení a rekurzivní stahování

Wget dokáže zrcadlit celý web, nebo jen část. Pokud web má být možné používat poté offline, hodí se, aby také jednotlivé odkazy byly převedeny na lokální. I to wget umí.

# --mirror - zrcadlí a stahuje i závislosti
# --convert-links - převede odkazy na lokální, aby vše fungovalo i offline
# --no-parent - nestahuje nic z nadřazených složek
# --execute="robots = off" ignoruje soubor robots.txt
wget --execute="robots = off" --mirror --convert-links --no-parent http://datauri.kutac.cz/

Stáhnutí všech souborů rekurzivně

# --recursive - prohledává i podsložky
# --accept - stahuje pouze soubory s danými příponami
# --exlude-directories dané složky vynechá
# 
wget --no-parent --accept "txt,md" ‐‐exclude-directories "domains" --recursive http://testdata.kutac.cz/

Opakování při chybě

# wget uskuteční 10 pokusů pro stažení souboru
# Defaultní hodnota --tries je 20
wget --tries=10 --wait=1 http://testdata.kutac.cz/wget/unavailable.txt

Wget - opakované pokusy

Stáhnutí souborů ze stránek chráněných heslem

Zde se jedná pouze o HTTP Basic auth, nikoli o běžné přihlašování pomocí formuláře. I toto wget zvládne.

wget ‐‐http-user="admin" ‐‐http-password="Pa55w0rd" http://testdata.kutac.cz/wget/restricted.txt

Případně vložit jméno a heslo přímo do URL:

wget http://admin:Pa55w0rd@testdata.kutac.cz/wget/restricted.txt

Wget toho umí mnohem více, zde je pouze výpis co se může hodit častěji.

K tomuto článku již není možné přidávat další komentáře